<?php

/**
 * Usuarios_SeguridadController
 * Clase para administrar el acceso de los usuarios al sistema.
 *
 * @author Victor Cardenas
 * @version 1.0
 */
class Usuarios_SeguridadController extends Zend_Controller_Action {
	
	public function loginAction() {
		
		if ($this->getRequest()->isGet()) {
			//si es GET, el acceso es ilegal
			//$appConfig = Zend_Registry::get("appConfig");
			//$this->_redirect($url_saces.'?acceso=ilegal');
			$this->view->priorityMessenger("Intento de acceso ilegal","error");
			$this->_helper->redirector("index","index","default");
		}
		
		//si es post
		$usuario = $this->getRequest()->getPost("usu");
		$clave = $this->getRequest()->getPost("cla");
		
		$seguridad = new Usuarios_Model_Seguridad();
		
		if($seguridad->validarUsuario($usuario, $clave)) {
		    
			$codusuario = Zend_Auth::getInstance()->getIdentity()->codusuario;
			
			$totalAccesos = $seguridad->cantidadAccesos($codusuario);
			$verificarClave = $seguridad->verificarPeriodoClave($codusuario);
			
			//OJO borrar
			$verificarClave = false;
			
			if (0 == $totalAccesos || $verificarClave) {
				$params = App_Util_SafeUrl::encriptar(array("codusuario"=>$codusuario));
				$this->_helper->redirector("renovarclave",null,null,$params);
			}
			
			$ip = $this->getRequest()->getClientIp();
			$seguridad->registrarAcceso($codusuario, $ip);
			$this->_helper->redirector("roles");
			
			//$this->_helper->redirector("lista","index","usuarios");
		} else {
		    
//			$appConfig = Zend_Registry::get("appConfig");
//			$url_saces = $appConfig->integracion->saces->url_home;
//			$this->_redirect($url_saces.'?acceso=denegado');
            $this->view->priorityMessenger("Los datos de autenticación no son válidos","error");
			$this->_helper->redirector("index","index","default");
		}
			
	}
	
	public function logoutAction() {
		 // Shutdown view script and layout
        $this->_helper->viewRenderer->setNoRender(true);
        Zend_Layout::getMvcInstance()->disableLayout();
        
        $auth = Zend_Auth::getInstance();
        // Delete the information from the session
        $auth->clearIdentity();
        Zend_Session::forgetMe();
        Zend_Session::destroy(true);
        
        //$appConfig = Zend_Registry::get("appConfig");
		//$url_saces = $appConfig->integracion->saces->url_home;
        //$this->_redirect($url_saces.'?acceso=fin');
        $this->_helper->redirector("index","index","default");
	}
	
	public function renovarclaveAction() {
		$form = new Usuarios_Form_RenovarClave();
		if($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {

				if($form->getValue("clave") != $form->getValue("reclave")) {
					$form->getElement("clave")->addError("Las claves no concuerdan");
					
				} else {
					try {
						$seguridad = new Usuarios_Model_Seguridad();
						$seguridad->actualizarClave($form->getValue("codusuario"), $form->getValue("clave"));
						
						
						$ip = $this->getRequest()->getClientIp();
						$seguridad->registrarAcceso($form->getValue("codusuario"), $ip);
						
						//$appConfig = Zend_Registry::get("appConfig");
						//$url_saces = $appConfig->integracion->saces->url_home;
						//$this->_redirect($url_saces.'?acceso=verificacion');
						$this->view->priorityMessenger("Usted ha renovado su clave correctamente","success");
						$this->_helper->redirector("index","index","default");
					} catch (Exception $e) {
						$this->view->priorityMessenger($e->getMessage(), 'error');
					}
				}
		} else {
			$form->getElement("codusuario")->setValue($this->_getParam("codusuario"));
		}
		
		$this->view->form = $form;
	}
	
	public function rolesAction() {
		$codusuario = Zend_Auth::getInstance()->getIdentity()->codusuario;
		
		if ($this->getRequest()->isPost()) {
			$opcionrol = $this->getRequest()->getPost("opcion");
			$usuarios = new Usuarios_Model_Usuarios();
			try {
				$usuarios->asignarRolFavorito($codusuario, $opcionrol);
				$this->view->priorityMessenger("El rol ha sido seleccionado como favorito correctamente","success");
			} catch (Exception $e) {
				$this->view->priorityMessenger($e->getMessage(),"error");
			}
		}
		
		$roles = new Roles_Model_Roles();
		$datos = $roles->getRolesPorUsuario($codusuario);
		$codpadrerol = $datos[0]["codpadre"];
		$existe=false;
		if (0 == count($datos)) {
			//$appConfig = Zend_Registry::get("appConfig");
			//$url_saces = $appConfig->integracion->saces->url_home;
			//$this->_redirect($url_saces.'?acceso=norol');
			$this->view->priorityMessenger("Usted no tiene roles asignados","error");
			$this->_helper->redirector("index","index","default");
			
		} elseif (1 == count($datos)) {
			$codrol = $datos[0]["codrol"];
			$nombrerol = $datos[0]["nombrerol"];
			$existe=true;
			
		} elseif ($this->_getParam("codrol") !== null) {
			$codrol = $this->_getParam("codrol");
			foreach ($datos as $row) {
				if ($row["codrol"]==$codrol) {
					$nombrerol = $row["nombrerol"];
					$existe=true;
					$datos_rol = $roles->getRol($codrol);
					$codpadrerol = $datos_rol["codpadre"];
					break;
				}
			}
			if (!$existe) {
				//$appConfig = Zend_Registry::get("appConfig");
				//$url_saces = $appConfig->integracion->saces->url_home;
				//$this->_redirect($url_saces.'?acceso=ilegal');
				$this->view->priorityMessenger("Acceso ilegal","error");
			    $this->_helper->redirector("index","index","default");
			}
		}
		
		if($existe) {
			$sf = new Roles_Model_Seccionfuncional();
			$perfil = $sf->generarPerfil($codusuario, $codrol);
			
			$loggedUser = new Zend_Session_Namespace("loggedUser");
			if($loggedUser->isLocked()) {
				$loggedUser->unlock();
			}
			
			$loggedUser->codpadrerol = $codpadrerol;
			$loggedUser->codrol = $codrol;
			$loggedUser->nombrerol = $nombrerol;
			$loggedUser->perfil = serialize($perfil);
			$domConfig = Zend_Registry::get("domConfig");
//			if($codpadrerol == $domConfig->ROL_INSTITUCION) {

			if($codpadrerol == Roles_Model_Roles::CODPADRE_PAR) {
				unset($perfil);
			}
		    if($codpadrerol == Roles_Model_Roles::CODPADRE_SEDE) {
			    $sedeService = new Sedes_Model_Sedes();
			    
			    $datoss = $sedeService->getDatosSedeUsuario($codusuario);
			    if(!isset($datoss["codsede"])){
					$this->view->priorityMessenger("No tiene sede asignada","error");
			        $this->_helper->redirector("index","index","default");
			    }
			    $datosSede = $sedeService->getSede($datoss["codsede"]);
			    
			    $loggedUser->codsede = $datosSede["codsede"];
			    $loggedUser->nombresede = $datosSede["nombresede"];
			    $loggedUser->tipousuario = $datoss["tipousuario"];
			}else{
			    unset($loggedUser->codsede);
			    unset($loggedUser->nombresede);
			}
			
			$loggedUser->lock();

			$this->_helper->redirector("home","index","default");
		}
		
		$this->view->registros = $datos;
	}

}//fin de la clase
